// 云函数入口文件
const cloud = require('wx-server-sdk')
// 云函数初始化
cloud.init()
// 云数据库的初始化
const db = cloud.database()

const rp = require('request-promise') //require 加载一个模块

const URL = 'http://musicapi.xiecheng.live/personalized'

const playlistCollection = db.collection('playlist')

const MAX_LIMIT = 100

// 云函数入口函数
exports.main = async (event, context) => {
   // 取出数据库中的所有记录(get()一次只能取100条)
   //  const list = await playlistCollection.get()
  const countResult = await playlistCollection.count() //返回的是一个对象,查询记录条数
  const total = countResult.total  // total: Object.count()对象 结果数量
  const batchTimes = Math.ceil(total / MAX_LIMIT)
  const tasks =[]
  for (let i = 0; i < batchTimes; i++){
    //skip可以规定从那一条取,limit规定取的条数
    let promise = playlistCollection.skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
    tasks.push(promise)
  }
  let list = {
    data: []
  }
  if (tasks.length > 0){
   // 使用了await可以不用.then()
    list = (await Promise.all(tasks)).reduce((acc, cur) => {  //Promise.all(tasks)返回的是一个对象数组
     return { 
       data: acc.data.concat(cur.data)
     }
   })
  }
 
   // rp(URL).then((res=>{}))异步操作完成后再把值赋给playlist，随后打印playlist的值
  const playlist = await rp(URL).then((res)=>{  
     return JSON.parse(res).result  // JSON.parse()将服务器传来的字符串数据转为JavaScript对象
  })
   //  去除重复的playlist的数据
  const newData = []

  for(let i=0, len1 = playlist.length; i < len1; i++){
    let flag  = true
    for (let j = 0, len2 = list.data.length; j < len2; j++){
      if(playlist[i].id === list.data[j].id){
        flag = false
        break
      }
    }
    if(flag){
      newData.push(playlist[i])
    }
   }

   // console.log(playlist)  后端代码的日志无法打印在前端console
  for (let i = 0, len = newData.length; i<len; i++){
     await playlistCollection.add({
       data:{
         // 属性展开逐条添加
         ...newData[i],
         createTime: db.serverDate(),
       }
     }).then((res)=>{
       console.log("插入成功！")
     }).catch((err)=>{
       console.log("插入失败！")
     })
   }

   return newData.length
}